home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 34 / Amiga Format CD34 (1998-11-20)(Future Publishing)(GB)[!][Christmas issue].iso / -seriously_amiga- / programming / basic / blitzc2p / c2p / c2p040onlycls.ascii < prev    next >
Text File  |  1998-10-01  |  7KB  |  426 lines

  1. WBStartup
  2. NoCli
  3.  
  4. ; CLEARSCREEN version. Additional code by Paul West.
  5.  
  6. ; Non-clearscreen results:
  7.  
  8. ; 040/25 results:
  9.  
  10. ; 320x200 @49.65fps DoublePAL or 55.3fps PAL
  11. ; 320x256 @36.2fps DoublePAL or 42.5fps PAL
  12. ; 320x240 @39.5fps DoublePAL or 45.5fps PAL
  13.  
  14. ; 060/50 results:
  15.  
  16. ; 320x256 @50fps PAL
  17. ; 320x200 @66.1fps PAL
  18.  
  19. #c2pBPLX=320
  20. #c2pBPLY=256
  21. #c2pBPLSIZE=(#c2pBPLX*#c2pBPLY)/8
  22.  
  23. #scrwidth=#c2pBPLX
  24. #scrheight=#c2pBPLY
  25. #screensize=#scrwidth*#scrheight
  26.  
  27. #clearscreento=$00000000
  28.  
  29. ; c2p1x1_8_c5_040
  30.  
  31. ; 110% on 040-25
  32.  
  33. Statement c2p040onlyinit{A.l,B.l}
  34.  
  35.   ;A.l=d0=Width.w
  36.   ;B.l=d1=Height.w
  37.  
  38. ; d0.w  chunkyx [chunky-pixels]
  39. ; d1.w  chunkyy [chunky-pixels]
  40. ; d3.w  scroffsy [screen-pixels]
  41.  
  42. c2p1x1_8_c5_040_init
  43.   LEA c2p_data(pc),a0
  44.   ANDI.l  #$ffff,d0
  45.   MULU.w  d0,d3
  46.   LSR.l #3,d3
  47.   MOVE.l  d3,c2p_scroffs-c2p_data(a0)
  48.   MULU.w  d0,d1
  49.   MOVE.l  d1,c2p_pixels-c2p_data(a0)
  50. AsmExit
  51. End Statement
  52.  
  53. Statement c2p040only{A.l,B.l}
  54.  
  55.   MOVE.l  d0,a0 ; Chunky
  56.   MOVE.l  d1,a1 ; Planar
  57.  
  58. ; a0  c2pscreen
  59. ; a1  bitplanes
  60.  
  61. c2p1x1_8_c5_040
  62.   MOVEM.l a3-a6,-(a7)
  63.  
  64.   MOVE.l  a7,stackstore
  65.   MOVE.l  #clearscreento,a7
  66.   LEA c2p_data(pc),a2
  67.  
  68.   MOVE.l  c2p_pixels-c2p_data(a2),a3
  69.   ADD.l a0,a3
  70.  
  71.   ADD.w #c2pBPLSIZE,a1
  72.   ADD.l c2p_scroffs-c2p_data(a2),a1
  73.   MOVE.l  a1,a2
  74.   ADD.l #c2pBPLSIZE*4,a2
  75.  
  76.   MOVE.l  (a0),d0
  77.   MOVE.l  a7,(a0)+
  78.   MOVE.l  (a0),d1
  79.   MOVE.l  a7,(a0)+
  80.   MOVE.l  (a0),d2
  81.   MOVE.l  a7,(a0)+
  82.   MOVE.l  (a0),d3
  83.   MOVE.l  a7,(a0)+
  84.   MOVE.l  (a0),d4
  85.   MOVE.l  a7,(a0)+
  86.   MOVE.l  (a0),d5
  87.   MOVE.l  a7,(a0)+
  88.  
  89.   MOVE.l  d4,d7     ; Swap 16x4, part 1
  90.   MOVE.w  d0,d4
  91.   SWAP  d4
  92.   MOVE.w  d4,d0
  93.   MOVE.w  d7,d4
  94.   MOVE.l  d5,d7
  95.   MOVE.w  d1,d5
  96.   SWAP  d5
  97.   MOVE.w  d5,d1
  98.   MOVE.w  d7,d5
  99.  
  100.   MOVE.l  d4,d7     ; Swap 2x4, part 1
  101.   LSR.l #2,d7
  102.   EOR.l d0,d7
  103.   AND.l #$33333333,d7
  104.   EOR.l d7,d0
  105.   LSL.l #2,d7
  106.   EOR.l d7,d4
  107.   MOVE.l  d5,d7
  108.   LSR.l #2,d7
  109.   EOR.l d1,d7
  110.   AND.l #$33333333,d7
  111.   EOR.l d7,d1
  112.   LSL.l #2,d7
  113.   EOR.l d7,d5
  114.  
  115.   MOVE.l  (a0),a5
  116.   MOVE.l  a7,(a0)+
  117.   MOVE.l  (a0),a6
  118.   MOVE.l  a7,(a0)+
  119.  
  120.   EXG d4,a5
  121.   EXG d5,a6
  122.  
  123.   MOVE.l  d4,d7     ; Swap 16x4, part 2
  124.   MOVE.w  d2,d4
  125.   SWAP  d4
  126.   MOVE.w  d4,d2
  127.   MOVE.w  d7,d4
  128.   MOVE.l  d5,d7
  129.   MOVE.w  d3,d5
  130.   SWAP  d5
  131.   MOVE.w  d5,d3
  132.   MOVE.w  d7,d5
  133.  
  134.   MOVE.l  d4,d7     ; Swap 2x4, part 2
  135.   LSR.l #2,d7
  136.   EOR.l d2,d7
  137.   AND.l #$33333333,d7
  138.   EOR.l d7,d2
  139.   LSL.l #2,d7
  140.   EOR.l d7,d4
  141.   MOVE.l  d5,d7
  142.   LSR.l #2,d7
  143.   EOR.l d3,d7
  144.   AND.l #$33333333,d7
  145.   EOR.l d7,d3
  146.   LSL.l #2,d7
  147.   EOR.l d7,d5
  148.  
  149.   MOVE.l  d1,d7     ; Swap 4x1
  150.   LSR.l #4,d7
  151.   EOR.l d0,d7
  152.   AND.l #$0f0f0f0f,d7
  153.   EOR.l d7,d0
  154.   LSL.l #4,d7
  155.   EOR.l d7,d1
  156.   MOVE.l  d3,d7
  157.   LSR.l #4,d7
  158.   EOR.l d2,d7
  159.   AND.l #$0f0f0f0f,d7
  160.   EOR.l d7,d2
  161.   LSL.l #4,d7
  162.   EOR.l d7,d3
  163.  
  164.   BRA _start
  165. _x
  166.   MOVE.l  (a0),d0
  167.   MOVE.l  a7,(a0)+
  168.   MOVE.l  (a0),d1
  169.   MOVE.l  a7,(a0)+
  170.   MOVE.l  (a0),d2
  171.   MOVE.l  a7,(a0)+
  172.   MOVE.l  (a0),d3
  173.   MOVE.l  a7,(a0)+
  174.   MOVE.l  (a0),d4
  175.   MOVE.l  a7,(a0)+
  176.   MOVE.l  (a0),d5
  177.   MOVE.l  a7,(a0)+
  178.  
  179.   MOVE.l  a6,-c2pBPLSIZE(a1)
  180.  
  181.   MOVE.l  d4,d7     ; Swap 16x4, part 1
  182.   MOVE.w  d0,d4
  183.   SWAP  d4
  184.   MOVE.w  d4,d0
  185.   MOVE.w  d7,d4
  186.   MOVE.l  d5,d7
  187.   MOVE.w  d1,d5
  188.   SWAP  d5
  189.   MOVE.w  d5,d1
  190.   MOVE.w  d7,d5
  191.  
  192.   MOVE.l  d4,d7     ; Swap 2x4, part 1
  193.   LSR.l #2,d7
  194.   EOR.l d0,d7
  195.   AND.l #$33333333,d7
  196.   EOR.l d7,d0
  197.   LSL.l #2,d7
  198.   EOR.l d7,d4
  199.   MOVE.l  d5,d7
  200.   LSR.l #2,d7
  201.   EOR.l d1,d7
  202.   AND.l #$33333333,d7
  203.   EOR.l d7,d1
  204.   LSL.l #2,d7
  205.   EOR.l d7,d5
  206.  
  207.   MOVE.l  (a0),d7
  208.   MOVE.l  a7,(a0)+
  209.   MOVE.l  (a0),a6
  210.   MOVE.l  a7,(a0)+
  211.  
  212.   MOVE.l  a5,-c2pBPLSIZE(a2)
  213.  
  214.   MOVE.l  d7,a5
  215.   EXG d4,a5
  216.   EXG d5,a6
  217.  
  218.   MOVE.l  d4,d7     ; Swap 16x4, part 2
  219.   MOVE.w  d2,d4
  220.   SWAP  d4
  221.   MOVE.w  d4,d2
  222.   MOVE.w  d7,d4
  223.   MOVE.l  d5,d7
  224.   MOVE.w  d3,d5
  225.   SWAP  d5
  226.   MOVE.w  d5,d3
  227.   MOVE.w  d7,d5
  228.  
  229.   MOVE.l  d4,d7     ; Swap 2x4, part 2
  230.   MOVE.l  d6,(a2)+
  231.   LSR.l #2,d7
  232.   EOR.l d2,d7
  233.   AND.l #$33333333,d7
  234.   EOR.l d7,d2
  235.   LSL.l #2,d7
  236.   EOR.l d7,d4
  237.   MOVE.l  d5,d7
  238.   LSR.l #2,d7
  239.   EOR.l d3,d7
  240.   AND.l #$33333333,d7
  241.   EOR.l d7,d3
  242.   LSL.l #2,d7
  243.   EOR.l d7,d5
  244.  
  245.   MOVE.l  d1,d7     ; Swap 4x1
  246.   LSR.l #4,d7
  247.   EOR.l d0,d7
  248.   MOVE.l  a4,(a1)+
  249.   AND.l #$0f0f0f0f,d7
  250.   EOR.l d7,d0
  251.   LSL.l #4,d7
  252.   EOR.l d7,d1
  253.   MOVE.l  d3,d7
  254.   LSR.l #4,d7
  255.   EOR.l d2,d7
  256.   AND.l #$0f0f0f0f,d7
  257.   EOR.l d7,d2
  258.   LSL.l #4,d7
  259.   EOR.l d7,d3
  260. _start
  261.  
  262.   MOVE.l  d2,d7     ; Swap 8x2, part 1
  263.   LSR.l #8,d7
  264.   EOR.l d0,d7
  265.   AND.l #$00ff00ff,d7
  266.   EOR.l d7,d0
  267.   LSL.l #8,d7
  268.   EOR.l d7,d2
  269.   MOVE.l  d2,d7
  270.   LSR.l #1,d7     ; Swap 1x2, part 1
  271.   EOR.l d0,d7
  272.   AND.l #$55555555,d7
  273.   EOR.l d7,d0
  274.   MOVE.l  d0,c2pBPLSIZE*2(a2)
  275.   ADD.l d7,d7
  276.   EOR.l d7,d2
  277.   MOVE.l  d3,d7     ; Swap 8x2, part 2
  278.   LSR.l #8,d7
  279.   EOR.l d1,d7
  280.   AND.l #$00ff00ff,d7
  281.   EOR.l d7,d1
  282.   LSL.l #8,d7
  283.   EOR.l d7,d3
  284.   MOVE.l  d3,d7
  285.   LSR.l #1,d7     ; Swap 1x2, part 2
  286.   EOR.l d1,d7
  287.   AND.l #$55555555,d7
  288.   EOR.l d7,d1
  289.   MOVE.l  d1,c2pBPLSIZE*2(a1)
  290.   ADD.l d7,d7
  291.   EOR.l d7,d3
  292.  
  293.   MOVE.l  d5,d7
  294.   LSR.l #4,d7
  295.   EOR.l d4,d7
  296.   AND.l #$0f0f0f0f,d7
  297.   EOR.l d7,d4
  298.   LSL.l #4,d7
  299.   EOR.l d7,d5
  300.  
  301.   EXG d4,a5
  302.   EXG d5,a6
  303.  
  304.   MOVE.l  d5,d7
  305.   LSR.l #4,d7
  306.   EOR.l d4,d7
  307.   AND.l #$0f0f0f0f,d7
  308.   EOR.l d7,d4
  309.   LSL.l #4,d7
  310.   EOR.l d7,d5
  311.  
  312.   MOVE.l  a5,d0
  313.   MOVE.l  a6,d1
  314.   MOVE.l  d2,c2pBPLSIZE(a2)
  315.  
  316.  
  317.   MOVE.l  d0,d7     ; Swap 8x2, part 3
  318.   LSR.l #8,d7
  319.   EOR.l d4,d7
  320.   AND.l #$00ff00ff,d7
  321.   EOR.l d7,d4
  322.   LSL.l #8,d7
  323.   EOR.l d7,d0
  324.   MOVE.l  d0,d7
  325.   LSR.l #1,d7     ; Swap 1x2, part 3
  326.   EOR.l d4,d7
  327.   AND.l #$55555555,d7
  328.   EOR.l d7,d4
  329.   ADD.l d7,d7
  330.   EOR.l d7,d0
  331.   MOVE.l  d1,d7     ; Swap 8x2, part 4
  332.   LSR.l #8,d7
  333.   MOVE.l  d3,c2pBPLSIZE(a1)
  334.   EOR.l d5,d7
  335.   AND.l #$00ff00ff,d7
  336.   EOR.l d7,d5
  337.   LSL.l #8,d7
  338.   EOR.l d7,d1
  339.   MOVE.l  d1,d7
  340.   LSR.l #1,d7     ; Swap 1x2, part 4
  341.   EOR.l d5,d7
  342.   AND.l #$55555555,d7
  343.   EOR.l d7,d5
  344.   ADD.l d7,d7
  345.   EOR.l d7,d1
  346.  
  347.   MOVE.l  d0,a5
  348.   MOVE.l  d1,a6
  349.  
  350.   MOVE.l  d4,d6
  351.   MOVE.l  d5,a4
  352.  
  353.   CMP.l a0,a3
  354.   BNE _x
  355.  
  356.   MOVE.l  a6,-c2pBPLSIZE(a1)
  357.   MOVE.l  a5,-c2pBPLSIZE(a2)
  358.   MOVE.l  d6,(a2)+
  359.   MOVE.l  a4,(a1)+
  360.  
  361.   MOVE.l  stackstore(pc),a7
  362.   MOVEM.l (a7)+,a3-a6
  363. AsmExit
  364.  
  365.   Even4
  366. stackstore: Dc.l 0
  367. c2p_data
  368. c2p_scroffs: Dc.l 0
  369. c2p_pixels: Dc.l 0
  370.   Ds.l  16
  371. End Statement
  372.  
  373.  
  374.  
  375.  
  376. .blitzprogram
  377. ; Setup
  378. InitBank 0,(#scrwidth*#scrheight)+1000,2|65536 ; Chipram planar buffer
  379. CludgeBitMap 0,#scrwidth,#scrheight,8,Bank(0)
  380. InitPalette 0,256
  381. For c=0 To 255
  382.   AGAPalRGB 0,c,Rnd(c),Rnd(c),Rnd(c)
  383. Next c
  384. AGAPalRGB 0,0,0,0,0
  385. Screen 0,0,0,#scrwidth,#scrheight,8,0,"c2p test",0,0,0
  386. Use Palette 0
  387. VWait 50
  388. baseaddress1.l=AllocMem(#scrwidth*#scrheight,$10000) ; Fastram chunky buffer
  389.  
  390. ; Put something into the chunky buffer so we can see it working
  391. GetReg a0,baseaddress1
  392. MOVE.l  #0,d0
  393. MOVE.l  #screensize-1,d1
  394. cloop
  395.   MOVE.b  d0,(a0)+
  396.   ADDQ.l  #1,d0
  397.   SUBQ.l  #1,d1
  398.   TST.l   d1
  399.   BLT     done
  400.   BRA     cloop
  401. done
  402.  
  403. ; Do the c2p test
  404. c2p040onlyinit{#scrwidth,#scrheight}
  405. VWait 20
  406. Forbid_
  407. VWait
  408. ResetTimer
  409. For time=1 To 800
  410.   c2p040only{baseaddress1,Bank(0)} ; Convert chunky to planar
  411. Next time
  412. t=Ticks
  413. VWait 2 : Permit_
  414. VWait 20
  415. FindScreen 0
  416. Window 0,0,11,640,100,0,"Test results for c2p",0,0
  417. WindowOutput 0
  418. NPrint "Routine performed @ ",50/(t/800),"fps - ",t," ticks"
  419. NPrint " "
  420. NPrint "Press mousebutton..."
  421. Free Screen 0
  422. MouseWait
  423. Free Window 0
  424. End
  425.  
  426.